{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "anaconda-cloud": {},
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.5.2"
    },
    "colab": {
      "name": "延安油田SMOTE,KNN,gbdt,随机森林,xgboost",
      "provenance": [],
      "collapsed_sections": [],
      "include_colab_link": true
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/sunyingjian/-Logging-related-network/blob/master/%E5%BB%B6%E5%AE%89%E6%B2%B9%E7%94%B0SMOTE%2CKNN%2Cgbdt%2C%E9%9A%8F%E6%9C%BA%E6%A3%AE%E6%9E%97%2Cxgboost.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Cqy3vXXOMI06",
        "colab_type": "text"
      },
      "source": [
        "### <font size=5px color=\"red\">✦ *Google Colab 突破90分钟自动断开:</font>\n",
        "<p><font size=3px > 每60分钟自动运行代码以刷新90分钟断开限制. 打开 developer-settings (在你的浏览器) 快速健 Ctrl+Shift+I 然后按console 输入以下代码 Enter. ( mac 按 Option+Command+I)</p><b>复制以下隐藏代码粉贴在浏览器console！！不要关闭浏览器以免失效</b>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3Z8cK8h2Avbv",
        "colab_type": "text"
      },
      "source": [
        "<code>function ClickConnect(){\n",
        "console.log(\"Working\"); \n",
        "document.querySelector(\"colab-connect-button\").click() \n",
        "}setInterval(ClickConnect,6000)</code>"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jtClEMAMLVHw",
        "colab_type": "code",
        "cellView": "both",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "f7da110d-3e49-4363-9715-d8b2c409cfbd"
      },
      "source": [
        "#@markdown <h3>← 输入了代码后运行以防止断开</h>\n",
        "\n",
        "\n",
        "import IPython\n",
        "from google.colab import output\n",
        "\n",
        "display(IPython.display.Javascript('''\n",
        " function ClickConnect(){\n",
        "   btn = document.querySelector(\"colab-connect-button\")\n",
        "   if (btn != null){\n",
        "     console.log(\"Click colab-connect-button\"); \n",
        "     btn.click() \n",
        "     }\n",
        "   \n",
        "   btn = document.getElementById('ok')\n",
        "   if (btn != null){\n",
        "     console.log(\"Click reconnect\"); \n",
        "     btn.click() \n",
        "     }\n",
        "  }\n",
        "  \n",
        "setInterval(ClickConnect,60000)\n",
        "'''))\n",
        "\n",
        "print(\"Done.\")"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "application/javascript": [
              "\n",
              " function ClickConnect(){\n",
              "   btn = document.querySelector(\"colab-connect-button\")\n",
              "   if (btn != null){\n",
              "     console.log(\"Click colab-connect-button\"); \n",
              "     btn.click() \n",
              "     }\n",
              "   \n",
              "   btn = document.getElementById('ok')\n",
              "   if (btn != null){\n",
              "     console.log(\"Click reconnect\"); \n",
              "     btn.click() \n",
              "     }\n",
              "  }\n",
              "  \n",
              "setInterval(ClickConnect,60000)\n"
            ],
            "text/plain": [
              "<IPython.core.display.Javascript object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Done.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "aFEXKoC6o2wB",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 121
        },
        "outputId": "17baf097-375b-4912-f08c-21ad925dd3e2"
      },
      "source": [
        "! git clone https://github.com/sunyingjian/numpy-.git"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cloning into 'numpy-'...\n",
            "remote: Enumerating objects: 59, done.\u001b[K\n",
            "remote: Counting objects:   1% (1/59)\u001b[K\rremote: Counting objects:   3% (2/59)\u001b[K\rremote: Counting objects:   5% (3/59)\u001b[K\rremote: Counting objects:   6% (4/59)\u001b[K\rremote: Counting objects:   8% (5/59)\u001b[K\rremote: Counting objects:  10% (6/59)\u001b[K\rremote: Counting objects:  11% (7/59)\u001b[K\rremote: Counting objects:  13% (8/59)\u001b[K\rremote: Counting objects:  15% (9/59)\u001b[K\rremote: Counting objects:  16% (10/59)\u001b[K\rremote: Counting objects:  18% (11/59)\u001b[K\rremote: Counting objects:  20% (12/59)\u001b[K\rremote: Counting objects:  22% (13/59)\u001b[K\rremote: Counting objects:  23% (14/59)\u001b[K\rremote: Counting objects:  25% (15/59)\u001b[K\rremote: Counting objects:  27% (16/59)\u001b[K\rremote: Counting objects:  28% (17/59)\u001b[K\rremote: Counting objects:  30% (18/59)\u001b[K\rremote: Counting objects:  32% (19/59)\u001b[K\rremote: Counting objects:  33% (20/59)\u001b[K\rremote: Counting objects:  35% (21/59)\u001b[K\rremote: Counting objects:  37% (22/59)\u001b[K\rremote: Counting objects:  38% (23/59)\u001b[K\rremote: Counting objects:  40% (24/59)\u001b[K\rremote: Counting objects:  42% (25/59)\u001b[K\rremote: Counting objects:  44% (26/59)\u001b[K\rremote: Counting objects:  45% (27/59)\u001b[K\rremote: Counting objects:  47% (28/59)\u001b[K\rremote: Counting objects:  49% (29/59)\u001b[K\rremote: Counting objects:  50% (30/59)\u001b[K\rremote: Counting objects:  52% (31/59)\u001b[K\rremote: Counting objects:  54% (32/59)\u001b[K\rremote: Counting objects:  55% (33/59)\u001b[K\rremote: Counting objects:  57% (34/59)\u001b[K\rremote: Counting objects:  59% (35/59)\u001b[K\rremote: Counting objects:  61% (36/59)\u001b[K\rremote: Counting objects:  62% (37/59)\u001b[K\rremote: Counting objects:  64% (38/59)\u001b[K\rremote: Counting objects:  66% (39/59)\u001b[K\rremote: Counting objects:  67% (40/59)\u001b[K\rremote: Counting objects:  69% (41/59)\u001b[K\rremote: Counting objects:  71% (42/59)\u001b[K\rremote: Counting objects:  72% (43/59)\u001b[K\rremote: Counting objects:  74% (44/59)\u001b[K\rremote: Counting objects:  76% (45/59)\u001b[K\rremote: Counting objects:  77% (46/59)\u001b[K\rremote: Counting objects:  79% (47/59)\u001b[K\rremote: Counting objects:  81% (48/59)\u001b[K\rremote: Counting objects:  83% (49/59)\u001b[K\rremote: Counting objects:  84% (50/59)\u001b[K\rremote: Counting objects:  86% (51/59)\u001b[K\rremote: Counting objects:  88% (52/59)\u001b[K\rremote: Counting objects:  89% (53/59)\u001b[K\rremote: Counting objects:  91% (54/59)\u001b[K\rremote: Counting objects:  93% (55/59)\u001b[K\rremote: Counting objects:  94% (56/59)\u001b[K\rremote: Counting objects:  96% (57/59)\u001b[K\rremote: Counting objects:  98% (58/59)\u001b[K\rremote: Counting objects: 100% (59/59)\u001b[K\rremote: Counting objects: 100% (59/59), done.\u001b[K\n",
            "remote: Compressing objects: 100% (59/59), done.\u001b[K\n",
            "remote: Total 59 (delta 22), reused 0 (delta 0), pack-reused 0\u001b[K\n",
            "Unpacking objects: 100% (59/59), done.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1rJBO73lpHA7",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 124
        },
        "outputId": "b666de55-9b2d-47b1-8cb5-52cff6a3f751"
      },
      "source": [
        "import os\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive')\n",
        "path = \"/content/numpy-/3345train data.csv\""
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=947318989803-6bn6qk8qdgf4n4g3pfee6491hc0brc4i.apps.googleusercontent.com&redirect_uri=urn%3aietf%3awg%3aoauth%3a2.0%3aoob&response_type=code&scope=email%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdocs.test%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive%20https%3a%2f%2fwww.googleapis.com%2fauth%2fdrive.photos.readonly%20https%3a%2f%2fwww.googleapis.com%2fauth%2fpeopleapi.readonly\n",
            "\n",
            "Enter your authorization code:\n",
            "··········\n",
            "Mounted at /content/drive\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "s5phM8LfoxvP",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 407
        },
        "outputId": "06811416-d39c-4daa-aaa7-7a7683cf1e3c"
      },
      "source": [
        "%matplotlib inline\n",
        "#%matplotlib inline 可以在Ipython编译器里直接使用，功能是可以内嵌绘图，并且可以省略掉plt.show()这一步。\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib as mpl\n",
        "import matplotlib.pyplot as plt\n",
        "import matplotlib.colors as colors\n",
        "from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
        "from pandas import set_option\n",
        "set_option(\"display.max_rows\", 10)#设置要显示的默认行数，显示的最大行数是10\n",
        "pd.options.mode.chained_assignment = None #为了在增加列表行数的时候防止出现setting with copy warning\n",
        "filename = 'facies_vectors.csv'\n",
        "training_data = pd.read_csv('/content/numpy-/3345train data.csv')\n",
        "training_data\n",
        "testing_data = pd.read_csv('/content/numpy-/3345test_data.csv')\n",
        "testing_data"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "      <th>Core Lithology</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.038756</td>\n",
              "      <td>0.026970</td>\n",
              "      <td>0.094776</td>\n",
              "      <td>0.112543</td>\n",
              "      <td>0.001420</td>\n",
              "      <td>0.614504</td>\n",
              "      <td>5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.347382</td>\n",
              "      <td>0.090194</td>\n",
              "      <td>0.145150</td>\n",
              "      <td>0.202335</td>\n",
              "      <td>0.002744</td>\n",
              "      <td>0.339568</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.218400</td>\n",
              "      <td>0.059510</td>\n",
              "      <td>0.252165</td>\n",
              "      <td>0.711295</td>\n",
              "      <td>0.003874</td>\n",
              "      <td>0.918567</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.366064</td>\n",
              "      <td>0.082147</td>\n",
              "      <td>0.149304</td>\n",
              "      <td>0.201731</td>\n",
              "      <td>0.003290</td>\n",
              "      <td>0.343180</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.291877</td>\n",
              "      <td>0.079981</td>\n",
              "      <td>0.141782</td>\n",
              "      <td>0.289309</td>\n",
              "      <td>0.003455</td>\n",
              "      <td>0.344605</td>\n",
              "      <td>7</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>361</th>\n",
              "      <td>0.016947</td>\n",
              "      <td>0.138827</td>\n",
              "      <td>0.118400</td>\n",
              "      <td>0.358567</td>\n",
              "      <td>0.281687</td>\n",
              "      <td>0.302936</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>362</th>\n",
              "      <td>0.131043</td>\n",
              "      <td>0.069016</td>\n",
              "      <td>0.029354</td>\n",
              "      <td>0.060197</td>\n",
              "      <td>0.282093</td>\n",
              "      <td>0.253809</td>\n",
              "      <td>3</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>363</th>\n",
              "      <td>0.036182</td>\n",
              "      <td>0.032010</td>\n",
              "      <td>0.030090</td>\n",
              "      <td>0.071069</td>\n",
              "      <td>0.359737</td>\n",
              "      <td>0.435486</td>\n",
              "      <td>5</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>364</th>\n",
              "      <td>0.014562</td>\n",
              "      <td>0.127332</td>\n",
              "      <td>0.035014</td>\n",
              "      <td>0.178579</td>\n",
              "      <td>0.803566</td>\n",
              "      <td>0.311641</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>365</th>\n",
              "      <td>0.014427</td>\n",
              "      <td>0.134185</td>\n",
              "      <td>0.033460</td>\n",
              "      <td>0.186430</td>\n",
              "      <td>0.891134</td>\n",
              "      <td>0.311652</td>\n",
              "      <td>6</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>366 rows × 7 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "           AC       CAL        GR         K        RD        SP  Core Lithology\n",
              "0    0.038756  0.026970  0.094776  0.112543  0.001420  0.614504               5\n",
              "1    0.347382  0.090194  0.145150  0.202335  0.002744  0.339568               7\n",
              "2    0.218400  0.059510  0.252165  0.711295  0.003874  0.918567               3\n",
              "3    0.366064  0.082147  0.149304  0.201731  0.003290  0.343180               7\n",
              "4    0.291877  0.079981  0.141782  0.289309  0.003455  0.344605               7\n",
              "..        ...       ...       ...       ...       ...       ...             ...\n",
              "361  0.016947  0.138827  0.118400  0.358567  0.281687  0.302936               6\n",
              "362  0.131043  0.069016  0.029354  0.060197  0.282093  0.253809               3\n",
              "363  0.036182  0.032010  0.030090  0.071069  0.359737  0.435486               5\n",
              "364  0.014562  0.127332  0.035014  0.178579  0.803566  0.311641               6\n",
              "365  0.014427  0.134185  0.033460  0.186430  0.891134  0.311652               6\n",
              "\n",
              "[366 rows x 7 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DkIbFPdg24i1",
        "colab_type": "text"
      },
      "source": [
        "#训练集处理"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YAVy0Tvfoxvh",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 288
        },
        "outputId": "af31d2c1-ee13-4dc8-913c-3db84833ea56"
      },
      "source": [
        "# 1=粗砂岩  2=中砂岩   3=细砂岩\n",
        "# 4=粉砂岩 5=白云岩 6=石灰岩 7=泥岩\n",
        "\n",
        "facies_labels = ['CS', 'MS', 'FS', 'SS', 'DM',\n",
        "                 'LS', 'MDS']\n",
        "training_data.describe()"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "      <th>Core Lithology</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>3.345000e+03</td>\n",
              "      <td>3.345000e+03</td>\n",
              "      <td>3.345000e+03</td>\n",
              "      <td>3.345000e+03</td>\n",
              "      <td>3.345000e+03</td>\n",
              "      <td>3345.000000</td>\n",
              "      <td>3345.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>2.107992e-01</td>\n",
              "      <td>1.450162e-01</td>\n",
              "      <td>1.662901e-01</td>\n",
              "      <td>3.464980e-01</td>\n",
              "      <td>4.917120e-02</td>\n",
              "      <td>0.418110</td>\n",
              "      <td>4.221525</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>1.099814e-01</td>\n",
              "      <td>1.353280e-01</td>\n",
              "      <td>1.036918e-01</td>\n",
              "      <td>1.808527e-01</td>\n",
              "      <td>8.719010e-02</td>\n",
              "      <td>0.196548</td>\n",
              "      <td>2.079667</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>1.000000e-07</td>\n",
              "      <td>1.000000e-08</td>\n",
              "      <td>1.000000e-07</td>\n",
              "      <td>1.000000e-07</td>\n",
              "      <td>1.000000e-09</td>\n",
              "      <td>-0.062739</td>\n",
              "      <td>1.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>1.594008e-01</td>\n",
              "      <td>5.225926e-02</td>\n",
              "      <td>8.778840e-02</td>\n",
              "      <td>2.079726e-01</td>\n",
              "      <td>1.270254e-02</td>\n",
              "      <td>0.325241</td>\n",
              "      <td>2.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>2.124234e-01</td>\n",
              "      <td>9.779821e-02</td>\n",
              "      <td>1.520483e-01</td>\n",
              "      <td>3.352124e-01</td>\n",
              "      <td>2.403313e-02</td>\n",
              "      <td>0.384527</td>\n",
              "      <td>4.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>2.574892e-01</td>\n",
              "      <td>1.850738e-01</td>\n",
              "      <td>2.359244e-01</td>\n",
              "      <td>4.811758e-01</td>\n",
              "      <td>4.815465e-02</td>\n",
              "      <td>0.439047</td>\n",
              "      <td>7.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>1.000000e+00</td>\n",
              "      <td>1.000000e+00</td>\n",
              "      <td>1.000000e+00</td>\n",
              "      <td>1.000000e+00</td>\n",
              "      <td>1.000000e+00</td>\n",
              "      <td>1.000000</td>\n",
              "      <td>7.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                 AC           CAL  ...           SP  Core Lithology\n",
              "count  3.345000e+03  3.345000e+03  ...  3345.000000     3345.000000\n",
              "mean   2.107992e-01  1.450162e-01  ...     0.418110        4.221525\n",
              "std    1.099814e-01  1.353280e-01  ...     0.196548        2.079667\n",
              "min    1.000000e-07  1.000000e-08  ...    -0.062739        1.000000\n",
              "25%    1.594008e-01  5.225926e-02  ...     0.325241        2.000000\n",
              "50%    2.124234e-01  9.779821e-02  ...     0.384527        4.000000\n",
              "75%    2.574892e-01  1.850738e-01  ...     0.439047        7.000000\n",
              "max    1.000000e+00  1.000000e+00  ...     1.000000        7.000000\n",
              "\n",
              "[8 rows x 7 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "AicpZIfj28MY",
        "colab_type": "text"
      },
      "source": [
        "#测试集处理"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "A7kUM7h32-O4",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 288
        },
        "outputId": "fc72ef15-006c-4f40-d141-88f6e56598de"
      },
      "source": [
        "# 1=粗砂岩  2=中砂岩   3=细砂岩\n",
        "# 4=粉砂岩 5=白云岩 6=石灰岩 7=泥岩\n",
        "\n",
        "facies_labels = ['CS', 'MS', 'FS', 'SS', 'DM',\n",
        "                 'LS', 'MDS']\n",
        "testing_data.describe()"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "      <th>Core Lithology</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>0.214074</td>\n",
              "      <td>0.148747</td>\n",
              "      <td>0.147995</td>\n",
              "      <td>0.330942</td>\n",
              "      <td>0.046567</td>\n",
              "      <td>0.389129</td>\n",
              "      <td>4.215847</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>0.108781</td>\n",
              "      <td>0.144160</td>\n",
              "      <td>0.087543</td>\n",
              "      <td>0.181384</td>\n",
              "      <td>0.080542</td>\n",
              "      <td>0.196271</td>\n",
              "      <td>2.072619</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>0.003611</td>\n",
              "      <td>0.007118</td>\n",
              "      <td>0.005029</td>\n",
              "      <td>0.025971</td>\n",
              "      <td>0.001420</td>\n",
              "      <td>-0.061365</td>\n",
              "      <td>1.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>0.162638</td>\n",
              "      <td>0.052989</td>\n",
              "      <td>0.079442</td>\n",
              "      <td>0.194786</td>\n",
              "      <td>0.012828</td>\n",
              "      <td>0.317109</td>\n",
              "      <td>2.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>0.215371</td>\n",
              "      <td>0.098682</td>\n",
              "      <td>0.132807</td>\n",
              "      <td>0.302396</td>\n",
              "      <td>0.022275</td>\n",
              "      <td>0.379000</td>\n",
              "      <td>4.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>0.269240</td>\n",
              "      <td>0.179492</td>\n",
              "      <td>0.217013</td>\n",
              "      <td>0.456563</td>\n",
              "      <td>0.047410</td>\n",
              "      <td>0.435390</td>\n",
              "      <td>7.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>0.713160</td>\n",
              "      <td>0.994694</td>\n",
              "      <td>0.483319</td>\n",
              "      <td>0.994363</td>\n",
              "      <td>0.891134</td>\n",
              "      <td>0.997070</td>\n",
              "      <td>7.000000</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "               AC         CAL  ...          SP  Core Lithology\n",
              "count  366.000000  366.000000  ...  366.000000      366.000000\n",
              "mean     0.214074    0.148747  ...    0.389129        4.215847\n",
              "std      0.108781    0.144160  ...    0.196271        2.072619\n",
              "min      0.003611    0.007118  ...   -0.061365        1.000000\n",
              "25%      0.162638    0.052989  ...    0.317109        2.000000\n",
              "50%      0.215371    0.098682  ...    0.379000        4.000000\n",
              "75%      0.269240    0.179492  ...    0.435390        7.000000\n",
              "max      0.713160    0.994694  ...    0.997070        7.000000\n",
              "\n",
              "[8 rows x 7 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "HeCzbkegoxv3",
        "colab_type": "text"
      },
      "source": [
        "##继续处理数据"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "scrolled": true,
        "id": "fdx8XRKqoxv3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 288
        },
        "outputId": "279bbf6e-8dad-49e9-fa1c-324101de21b5"
      },
      "source": [
        "correct_facies_labels = training_data['Core Lithology'].values\n",
        "correct_facies_labels_test = testing_data['Core Lithology'].values\n",
        "feature_vectors = training_data.drop(['Core Lithology'], axis=1)\n",
        "feature_vectors_test = testing_data.drop(['Core Lithology'], axis=1)\n",
        "feature_vectors.describe()\n",
        "feature_vectors_test.describe()"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>count</th>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "      <td>366.000000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>mean</th>\n",
              "      <td>0.214074</td>\n",
              "      <td>0.148747</td>\n",
              "      <td>0.147995</td>\n",
              "      <td>0.330942</td>\n",
              "      <td>0.046567</td>\n",
              "      <td>0.389129</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>std</th>\n",
              "      <td>0.108781</td>\n",
              "      <td>0.144160</td>\n",
              "      <td>0.087543</td>\n",
              "      <td>0.181384</td>\n",
              "      <td>0.080542</td>\n",
              "      <td>0.196271</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>min</th>\n",
              "      <td>0.003611</td>\n",
              "      <td>0.007118</td>\n",
              "      <td>0.005029</td>\n",
              "      <td>0.025971</td>\n",
              "      <td>0.001420</td>\n",
              "      <td>-0.061365</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25%</th>\n",
              "      <td>0.162638</td>\n",
              "      <td>0.052989</td>\n",
              "      <td>0.079442</td>\n",
              "      <td>0.194786</td>\n",
              "      <td>0.012828</td>\n",
              "      <td>0.317109</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>50%</th>\n",
              "      <td>0.215371</td>\n",
              "      <td>0.098682</td>\n",
              "      <td>0.132807</td>\n",
              "      <td>0.302396</td>\n",
              "      <td>0.022275</td>\n",
              "      <td>0.379000</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>75%</th>\n",
              "      <td>0.269240</td>\n",
              "      <td>0.179492</td>\n",
              "      <td>0.217013</td>\n",
              "      <td>0.456563</td>\n",
              "      <td>0.047410</td>\n",
              "      <td>0.435390</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>max</th>\n",
              "      <td>0.713160</td>\n",
              "      <td>0.994694</td>\n",
              "      <td>0.483319</td>\n",
              "      <td>0.994363</td>\n",
              "      <td>0.891134</td>\n",
              "      <td>0.997070</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "               AC         CAL          GR           K          RD          SP\n",
              "count  366.000000  366.000000  366.000000  366.000000  366.000000  366.000000\n",
              "mean     0.214074    0.148747    0.147995    0.330942    0.046567    0.389129\n",
              "std      0.108781    0.144160    0.087543    0.181384    0.080542    0.196271\n",
              "min      0.003611    0.007118    0.005029    0.025971    0.001420   -0.061365\n",
              "25%      0.162638    0.052989    0.079442    0.194786    0.012828    0.317109\n",
              "50%      0.215371    0.098682    0.132807    0.302396    0.022275    0.379000\n",
              "75%      0.269240    0.179492    0.217013    0.456563    0.047410    0.435390\n",
              "max      0.713160    0.994694    0.483319    0.994363    0.891134    0.997070"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MEDwUBRLoxv6",
        "colab_type": "text"
      },
      "source": [
        "Scikit包含一个预处理模块，可以“标准化”数据（赋予每个变量零均值和单位方差，也称为白化）。 许多机器学习算法都假定特征将是标准的正态分布数据（即：均值和单位方差为零的高斯）。 用于标准化训练集的因素必须应用于将输入到分类器的任何后续功能集中。 StandardScalar类可以适合于训练集，并在以后用于标准化任何训练数据。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bz6rBg4ooxv6",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn import preprocessing\n",
        "\n",
        "scaler = preprocessing.StandardScaler().fit(feature_vectors)\n",
        "scaled_features = scaler.transform(feature_vectors)\n",
        "scaler_test = preprocessing.StandardScaler().fit(feature_vectors_test)\n",
        "scaled_features_test = scaler.transform(feature_vectors_test)"
      ],
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IiC-N8VUoxv9",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 407
        },
        "outputId": "65cd0143-b446-4d43-95a5-d6ef89edf93d"
      },
      "source": [
        "feature_vectors"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.029102</td>\n",
              "      <td>0.031789</td>\n",
              "      <td>0.026724</td>\n",
              "      <td>0.202335</td>\n",
              "      <td>0.078986</td>\n",
              "      <td>0.333754</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.032883</td>\n",
              "      <td>0.033469</td>\n",
              "      <td>0.030592</td>\n",
              "      <td>0.203141</td>\n",
              "      <td>0.076064</td>\n",
              "      <td>0.333669</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.034385</td>\n",
              "      <td>0.037006</td>\n",
              "      <td>0.032359</td>\n",
              "      <td>0.200121</td>\n",
              "      <td>0.074503</td>\n",
              "      <td>0.333619</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.243816</td>\n",
              "      <td>0.143381</td>\n",
              "      <td>0.086581</td>\n",
              "      <td>0.290115</td>\n",
              "      <td>0.017649</td>\n",
              "      <td>0.094025</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.248043</td>\n",
              "      <td>0.146786</td>\n",
              "      <td>0.084643</td>\n",
              "      <td>0.283874</td>\n",
              "      <td>0.017286</td>\n",
              "      <td>0.090554</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3340</th>\n",
              "      <td>0.012092</td>\n",
              "      <td>0.067866</td>\n",
              "      <td>0.007657</td>\n",
              "      <td>0.077713</td>\n",
              "      <td>0.181798</td>\n",
              "      <td>0.348797</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3341</th>\n",
              "      <td>0.011831</td>\n",
              "      <td>0.069989</td>\n",
              "      <td>0.007606</td>\n",
              "      <td>0.081135</td>\n",
              "      <td>0.206839</td>\n",
              "      <td>0.348560</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3342</th>\n",
              "      <td>0.011533</td>\n",
              "      <td>0.070121</td>\n",
              "      <td>0.009591</td>\n",
              "      <td>0.081337</td>\n",
              "      <td>0.250115</td>\n",
              "      <td>0.348470</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3343</th>\n",
              "      <td>0.008903</td>\n",
              "      <td>0.069325</td>\n",
              "      <td>0.010596</td>\n",
              "      <td>0.081135</td>\n",
              "      <td>0.281774</td>\n",
              "      <td>0.348340</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3344</th>\n",
              "      <td>0.003230</td>\n",
              "      <td>0.070210</td>\n",
              "      <td>0.012674</td>\n",
              "      <td>0.080129</td>\n",
              "      <td>0.329088</td>\n",
              "      <td>0.348228</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>3345 rows × 6 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "            AC       CAL        GR         K        RD        SP\n",
              "0     0.029102  0.031789  0.026724  0.202335  0.078986  0.333754\n",
              "1     0.032883  0.033469  0.030592  0.203141  0.076064  0.333669\n",
              "2     0.034385  0.037006  0.032359  0.200121  0.074503  0.333619\n",
              "3     0.243816  0.143381  0.086581  0.290115  0.017649  0.094025\n",
              "4     0.248043  0.146786  0.084643  0.283874  0.017286  0.090554\n",
              "...        ...       ...       ...       ...       ...       ...\n",
              "3340  0.012092  0.067866  0.007657  0.077713  0.181798  0.348797\n",
              "3341  0.011831  0.069989  0.007606  0.081135  0.206839  0.348560\n",
              "3342  0.011533  0.070121  0.009591  0.081337  0.250115  0.348470\n",
              "3343  0.008903  0.069325  0.010596  0.081135  0.281774  0.348340\n",
              "3344  0.003230  0.070210  0.012674  0.080129  0.329088  0.348228\n",
              "\n",
              "[3345 rows x 6 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bixBrTzs5qLy",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 407
        },
        "outputId": "b5a3061b-72af-4f09-915f-ca69ed5fbe8c"
      },
      "source": [
        "feature_vectors_test"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>AC</th>\n",
              "      <th>CAL</th>\n",
              "      <th>GR</th>\n",
              "      <th>K</th>\n",
              "      <th>RD</th>\n",
              "      <th>SP</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.038756</td>\n",
              "      <td>0.026970</td>\n",
              "      <td>0.094776</td>\n",
              "      <td>0.112543</td>\n",
              "      <td>0.001420</td>\n",
              "      <td>0.614504</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.347382</td>\n",
              "      <td>0.090194</td>\n",
              "      <td>0.145150</td>\n",
              "      <td>0.202335</td>\n",
              "      <td>0.002744</td>\n",
              "      <td>0.339568</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.218400</td>\n",
              "      <td>0.059510</td>\n",
              "      <td>0.252165</td>\n",
              "      <td>0.711295</td>\n",
              "      <td>0.003874</td>\n",
              "      <td>0.918567</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.366064</td>\n",
              "      <td>0.082147</td>\n",
              "      <td>0.149304</td>\n",
              "      <td>0.201731</td>\n",
              "      <td>0.003290</td>\n",
              "      <td>0.343180</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>0.291877</td>\n",
              "      <td>0.079981</td>\n",
              "      <td>0.141782</td>\n",
              "      <td>0.289309</td>\n",
              "      <td>0.003455</td>\n",
              "      <td>0.344605</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>...</th>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "      <td>...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>361</th>\n",
              "      <td>0.016947</td>\n",
              "      <td>0.138827</td>\n",
              "      <td>0.118400</td>\n",
              "      <td>0.358567</td>\n",
              "      <td>0.281687</td>\n",
              "      <td>0.302936</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>362</th>\n",
              "      <td>0.131043</td>\n",
              "      <td>0.069016</td>\n",
              "      <td>0.029354</td>\n",
              "      <td>0.060197</td>\n",
              "      <td>0.282093</td>\n",
              "      <td>0.253809</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>363</th>\n",
              "      <td>0.036182</td>\n",
              "      <td>0.032010</td>\n",
              "      <td>0.030090</td>\n",
              "      <td>0.071069</td>\n",
              "      <td>0.359737</td>\n",
              "      <td>0.435486</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>364</th>\n",
              "      <td>0.014562</td>\n",
              "      <td>0.127332</td>\n",
              "      <td>0.035014</td>\n",
              "      <td>0.178579</td>\n",
              "      <td>0.803566</td>\n",
              "      <td>0.311641</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>365</th>\n",
              "      <td>0.014427</td>\n",
              "      <td>0.134185</td>\n",
              "      <td>0.033460</td>\n",
              "      <td>0.186430</td>\n",
              "      <td>0.891134</td>\n",
              "      <td>0.311652</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "<p>366 rows × 6 columns</p>\n",
              "</div>"
            ],
            "text/plain": [
              "           AC       CAL        GR         K        RD        SP\n",
              "0    0.038756  0.026970  0.094776  0.112543  0.001420  0.614504\n",
              "1    0.347382  0.090194  0.145150  0.202335  0.002744  0.339568\n",
              "2    0.218400  0.059510  0.252165  0.711295  0.003874  0.918567\n",
              "3    0.366064  0.082147  0.149304  0.201731  0.003290  0.343180\n",
              "4    0.291877  0.079981  0.141782  0.289309  0.003455  0.344605\n",
              "..        ...       ...       ...       ...       ...       ...\n",
              "361  0.016947  0.138827  0.118400  0.358567  0.281687  0.302936\n",
              "362  0.131043  0.069016  0.029354  0.060197  0.282093  0.253809\n",
              "363  0.036182  0.032010  0.030090  0.071069  0.359737  0.435486\n",
              "364  0.014562  0.127332  0.035014  0.178579  0.803566  0.311641\n",
              "365  0.014427  0.134185  0.033460  0.186430  0.891134  0.311652\n",
              "\n",
              "[366 rows x 6 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1WZaSxbaoxwD",
        "colab_type": "text"
      },
      "source": [
        "##导入本地py模块\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "FjGb0UhWYPbu",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import sys\n",
        "sys.path.append('/content/drive/My Drive/Colab Notebooks/Machine-Learning-From-Scratch-master')"
      ],
      "execution_count": 10,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KHf61uM9pzdt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train = scaled_features\n",
        "X_test = scaled_features_test\n",
        "y_train = correct_facies_labels\n",
        "y_test = correct_facies_labels_test"
      ],
      "execution_count": 11,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tjYep1ppoxwI",
        "colab_type": "text"
      },
      "source": [
        "##使用KNN\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mWRb1D0TTJpL",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 325
        },
        "outputId": "78ec1907-b773-4788-cf16-c366245a82b4"
      },
      "source": [
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "from sklearn import datasets\n",
        "\n",
        "from utils import train_test_split, normalize, accuracy_score\n",
        "from utils import euclidean_distance, Plot\n",
        "class KNN():\n",
        "\n",
        "    def __init__(self,k=5):\n",
        "\n",
        "        self.k = k\n",
        "    def predict(self, X_test, X_train, y_train):\n",
        "\n",
        "        y_predict = np.zeros(X_test.shape[0])\n",
        "\n",
        "        for i in range(X_test.shape[0]):\n",
        "\n",
        "            distances = np.zeros((X_train.shape[0], 2)) #测试的数据和训练的各个数据的欧式距离\n",
        "\n",
        "            for j in range(X_train.shape[0]):\n",
        "                dis = euclidean_distance(X_test[i], X_train[j]) #计算欧式距离\n",
        "                label = y_train[j] #测试集到的每个训练集的数据的分类标签\n",
        "                distances[j] = [dis, label]\n",
        "\n",
        "                # argsort()得到测试集到训练的各个数据的欧式距离从小到大排列并且得到序列，然后再取前k个.\n",
        "                k_nearest_neighbors = distances[distances[:, 0].argsort()][:self.k]\n",
        "\n",
        "                #利用np.bincount统计k个近邻里面各类别出现的次数\n",
        "                counts = np.bincount(k_nearest_neighbors[:, 1].astype('int'))\n",
        "\n",
        "                #得出每个测试数据k个近邻里面各类别出现的次数最多的类别\n",
        "                testLabel = counts.argmax()\n",
        "                y_predict[i] = testLabel\n",
        "\n",
        "        return y_predict\n",
        "\n",
        "def run():\n",
        "    #初始化knn\n",
        "    model = KNN(k=5)\n",
        "    y_pred = model.predict(X_test, X_train, y_train)\n",
        "\n",
        "    accuracy = accuracy_score(y_test, y_pred)\n",
        "\n",
        "    print(\"Accuracy:\", accuracy)\n",
        "\n",
        "    # 用图画出测试集的分类情况\n",
        "    Plot().plot_in_2d(X_test, y_pred, title=\"KNN\", accuracy=accuracy)\n",
        "\n",
        "\n",
        "if __name__ == \"__main__\":\n",
        "    run()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Accuracy: 0.8497267759562842\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "r_r1dwF2oxwO",
        "colab_type": "text"
      },
      "source": [
        "##分类混淆矩阵"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BT0VKigGmQ9y",
        "colab_type": "text"
      },
      "source": [
        "这里需要导入一个py模块具体方法如下："
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tSgtFGommg4b",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 55
        },
        "outputId": "8e2fda70-ebc2-4cc8-8ac4-652853f33132"
      },
      "source": [
        "#导入py模块\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive/')\n",
        "#加入路径\n",
        "import sys\n",
        "sys.path.append('/content/drive/My Drive/Colab Notebooks/')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive/; to attempt to forcibly remount, call drive.mount(\"/content/drive/\", force_remount=True).\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "b4HrWWJjoxwP",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 173
        },
        "outputId": "dedcfe5e-829f-4550-d8c4-ac86c4f4ff31"
      },
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "from classification_utilities import display_cm, display_adj_cm\n",
        "conf = confusion_matrix(y_test, correct_facies_labels_test)\n",
        "display_cm(conf, facies_labels, hide_zeros=True)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "     Pred    CS    MS    FS    SS    DM    LS   MDS Total\n",
            "     True\n",
            "       CS    20                                        20\n",
            "       MS          80                                  80\n",
            "       FS                80                            80\n",
            "       SS                      20                      20\n",
            "       DM                            53                53\n",
            "       LS                                  13          13\n",
            "      MDS                                       100   100\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WVNXWEBuZn9u",
        "colab_type": "text"
      },
      "source": [
        "##实现gbdt"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TueE172lZmn9",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "outputId": "976635e4-5d14-4192-9d5d-a809fd5cb58d"
      },
      "source": [
        "max_depth=4\n",
        "max_features=10\n",
        "n_estimators=80\n",
        "from sklearn.ensemble import GradientBoostingClassifier\n",
        "import sklearn.metrics\n",
        "gbm0= GradientBoostingClassifier(random_state=10)\n",
        "gbm0.fit(X_train,y_train)\n",
        "y_pred= gbm0.predict(X_test)\n",
        "print(\"Accuracy : %.4f\" % sklearn.metrics.accuracy_score(y_test, y_pred))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Accuracy : 0.8333\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mv6q8HrHc0vT",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 173
        },
        "outputId": "14beacb6-eb70-409b-ddd5-a7aa51170abf"
      },
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "from classification_utilities import display_cm, display_adj_cm\n",
        "conf = confusion_matrix(y_test, correct_facies_labels_test)\n",
        "display_cm(conf, facies_labels, hide_zeros=True)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "     Pred    CS    MS    FS    SS    DM    LS   MDS Total\n",
            "     True\n",
            "       CS    20                                        20\n",
            "       MS          80                                  80\n",
            "       FS                80                            80\n",
            "       SS                      20                      20\n",
            "       DM                            53                53\n",
            "       LS                                  13          13\n",
            "      MDS                                       100   100\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "07ffsrfrctbh",
        "colab_type": "text"
      },
      "source": [
        "##随机森林\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "U9yut51WdBuS",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import sys\n",
        "sys.path.append('/content/Machine-Learning-From-Scratch')"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "fckcyOhbcm9l",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 587
        },
        "outputId": "d05a7048-245c-44d8-f120-c5a99e862f32"
      },
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn import metrics\n",
        "\n",
        "rfmodel = RandomForestClassifier()\n",
        "rfmodel.fit(X_train,y_train)\n",
        "print('model')\n",
        "print(rfmodel)\n",
        "\n",
        "ypredrf1 = rfmodel.predict(X_test)\n",
        "print('confusion matrix')\n",
        "print(metrics.confusion_matrix(y_test, ypredrf1))\n",
        "print('classification report')\n",
        "print(metrics.classification_report(y_test, ypredrf1))\n",
        "print('Accuracy : %f' % (metrics.accuracy_score(y_test, ypredrf1)))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "model\n",
            "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
            "                       criterion='gini', max_depth=None, max_features='auto',\n",
            "                       max_leaf_nodes=None, max_samples=None,\n",
            "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
            "                       min_samples_leaf=1, min_samples_split=2,\n",
            "                       min_weight_fraction_leaf=0.0, n_estimators=100,\n",
            "                       n_jobs=None, oob_score=False, random_state=None,\n",
            "                       verbose=0, warm_start=False)\n",
            "confusion matrix\n",
            "[[17  3  0  0  0  0  0]\n",
            " [ 0 72  2  0  0  0  6]\n",
            " [ 0  1 75  3  0  0  1]\n",
            " [ 0  3  1 15  0  0  1]\n",
            " [ 0  0  0  0 52  0  1]\n",
            " [ 0  0  0  0  0 13  0]\n",
            " [ 0  7  6  1  1  0 85]]\n",
            "classification report\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           1       1.00      0.85      0.92        20\n",
            "           2       0.84      0.90      0.87        80\n",
            "           3       0.89      0.94      0.91        80\n",
            "           4       0.79      0.75      0.77        20\n",
            "           5       0.98      0.98      0.98        53\n",
            "           6       1.00      1.00      1.00        13\n",
            "           7       0.90      0.85      0.88       100\n",
            "\n",
            "    accuracy                           0.90       366\n",
            "   macro avg       0.91      0.90      0.90       366\n",
            "weighted avg       0.90      0.90      0.90       366\n",
            "\n",
            "Accuracy : 0.898907\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "G5fedIzsQ-jC",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 55
        },
        "outputId": "b6178ecd-e665-435e-d2ff-c60e0ab5f7b7"
      },
      "source": [
        "#导入py模块\n",
        "from google.colab import drive\n",
        "drive.mount('/content/drive/')\n",
        "#加入路径\n",
        "import sys\n",
        "sys.path.append('/content/drive/My Drive/Colab Notebooks/')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Drive already mounted at /content/drive/; to attempt to forcibly remount, call drive.mount(\"/content/drive/\", force_remount=True).\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "353yCbEiREJN",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 173
        },
        "outputId": "00b2f662-74bc-4816-8cdc-bda64b8735ad"
      },
      "source": [
        "from sklearn.metrics import confusion_matrix\n",
        "from classification_utilities import display_cm, display_adj_cm\n",
        "conf = confusion_matrix(y_test, correct_facies_labels_test)\n",
        "display_cm(conf, facies_labels, hide_zeros=True)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "     Pred    CS    MS    FS    SS    DM    LS   MDS Total\n",
            "     True\n",
            "       CS    20                                        20\n",
            "       MS          80                                  80\n",
            "       FS                80                            80\n",
            "       SS                      20                      20\n",
            "       DM                            53                53\n",
            "       LS                                  13          13\n",
            "      MDS                                       100   100\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7Ujww7BhTbkg",
        "colab_type": "text"
      },
      "source": [
        "##smote过采样"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NSd7XB_dTenr",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 331
        },
        "outputId": "315dc582-ef8c-4751-ffd4-5d980c55c589"
      },
      "source": [
        "from imblearn.over_sampling import SMOTE\n",
        "from collections import Counter\n",
        "sm = SMOTE(random_state=123)\n",
        "X_train_sm, y_train_sm = sm.fit_sample(X_train, y_train)\n",
        "\n",
        "train_x = pd.DataFrame(X_train_sm)\n",
        "train_y = pd.DataFrame(y_train_sm)\n",
        "print(Counter(y_train_sm))"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/sklearn/externals/six.py:31: FutureWarning: The module is deprecated in version 0.21 and will be removed in version 0.23 since we've dropped support for Python 2.7. Please rely on the official version of six (https://pypi.org/project/six/).\n",
            "  \"(https://pypi.org/project/six/).\", FutureWarning)\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "Counter({5: 928, 3: 928, 7: 928, 1: 928, 2: 928, 4: 928, 6: 928})\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:144: FutureWarning: The sklearn.neighbors.base module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.neighbors. Anything that cannot be imported from sklearn.neighbors is now part of the private API.\n",
            "  warnings.warn(message, FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n",
            "/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:87: FutureWarning: Function safe_indexing is deprecated; safe_indexing is deprecated in version 0.22 and will be removed in version 0.24.\n",
            "  warnings.warn(msg, category=FutureWarning)\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ubYsXawxUJ6a",
        "colab_type": "text"
      },
      "source": [
        "##使用smote的随机森林"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "GukuP1gRUIcJ",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 642
        },
        "outputId": "27136da6-3a4a-4abb-bf23-aadbaca2d8fd"
      },
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn import metrics\n",
        "\n",
        "rfmodel = RandomForestClassifier()\n",
        "rfmodel.fit(train_x,train_y)\n",
        "print('model')\n",
        "print(rfmodel)\n",
        "\n",
        "ypredrf1 = rfmodel.predict(X_test)\n",
        "print('confusion matrix')\n",
        "print(metrics.confusion_matrix(y_test, ypredrf1))\n",
        "print('classification report')\n",
        "print(metrics.classification_report(y_test, ypredrf1))\n",
        "print('Accuracy : %f' % (metrics.accuracy_score(y_test, ypredrf1)))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n",
            "  \"\"\"\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "model\n",
            "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
            "                       criterion='gini', max_depth=None, max_features='auto',\n",
            "                       max_leaf_nodes=None, max_samples=None,\n",
            "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
            "                       min_samples_leaf=1, min_samples_split=2,\n",
            "                       min_weight_fraction_leaf=0.0, n_estimators=100,\n",
            "                       n_jobs=None, oob_score=False, random_state=None,\n",
            "                       verbose=0, warm_start=False)\n",
            "confusion matrix\n",
            "[[20  0  0  0  0  0  0]\n",
            " [ 0 72  3  1  0  0  4]\n",
            " [ 0  1 76  2  0  0  1]\n",
            " [ 0  3  1 16  0  0  0]\n",
            " [ 0  0  0  0 53  0  0]\n",
            " [ 0  0  0  0  0 13  0]\n",
            " [ 0  6  5  2  1  0 86]]\n",
            "classification report\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           1       1.00      1.00      1.00        20\n",
            "           2       0.88      0.90      0.89        80\n",
            "           3       0.89      0.95      0.92        80\n",
            "           4       0.76      0.80      0.78        20\n",
            "           5       0.98      1.00      0.99        53\n",
            "           6       1.00      1.00      1.00        13\n",
            "           7       0.95      0.86      0.90       100\n",
            "\n",
            "    accuracy                           0.92       366\n",
            "   macro avg       0.92      0.93      0.93       366\n",
            "weighted avg       0.92      0.92      0.92       366\n",
            "\n",
            "Accuracy : 0.918033\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "m147xfrt7zdD",
        "colab_type": "text"
      },
      "source": [
        "##pca处理"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0qWeytq172tr",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#前置数据处理\n",
        "all_data=pd.read_csv('/content/numpy-/延安油田总数居.csv')\n",
        "all_data_label=all_data['Core Lithology'].values\n",
        "all_data_only=all_data.drop(['Core Lithology'],axis=1)"
      ],
      "execution_count": 44,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "D96D71hl8Ba9",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "outputId": "deff6bd8-9800-403e-a301-f6bbe1bcdf47"
      },
      "source": [
        "import numpy as np\n",
        "from sklearn.datasets import load_iris\n",
        "from sklearn.decomposition import PCA\n",
        "import matplotlib.pyplot as plt\n",
        "X = all_data_only\n",
        "Y = all_data_label\n",
        "sklearn_pca = PCA(n_components=6)#降到四维\n",
        "data_2d2 = sklearn_pca.fit_transform(X)\n",
        "plt.subplot(122)\n",
        "plt.title(\"sklearn_PCA\")\n",
        "plt.scatter(data_2d2[:, 0], data_2d2[:, 1], c = Y)\n",
        "plt.show()"
      ],
      "execution_count": 58,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab_type": "code",
        "id": "IuZ_ErUnmts6",
        "colab": {}
      },
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "X_train_PCA,X_test_PCA,y_train_PCA,y_test_PCA=train_test_split(data_2d2,all_data_label,test_size=0.2,random_state=42)"
      ],
      "execution_count": 59,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FwytgV4l-H6a",
        "colab_type": "text"
      },
      "source": [
        "##采用pca后的随机森林"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_u7iJPPW9wwq",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 587
        },
        "outputId": "46ad352a-70af-407b-d39b-79e777992a79"
      },
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn import metrics\n",
        "\n",
        "rfmodel = RandomForestClassifier()\n",
        "rfmodel.fit(X_train_PCA,y_train_PCA)\n",
        "print('model')\n",
        "print(rfmodel)\n",
        "\n",
        "ypredrf1 = rfmodel.predict(X_test_PCA)\n",
        "print('confusion matrix')\n",
        "print(metrics.confusion_matrix(y_test_PCA, ypredrf1))\n",
        "print('classification report')\n",
        "print(metrics.classification_report(y_test_PCA, ypredrf1))\n",
        "print('Accuracy : %f' % (metrics.accuracy_score(y_test_PCA, ypredrf1)))"
      ],
      "execution_count": 60,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "model\n",
            "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
            "                       criterion='gini', max_depth=None, max_features='auto',\n",
            "                       max_leaf_nodes=None, max_samples=None,\n",
            "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
            "                       min_samples_leaf=1, min_samples_split=2,\n",
            "                       min_weight_fraction_leaf=0.0, n_estimators=100,\n",
            "                       n_jobs=None, oob_score=False, random_state=None,\n",
            "                       verbose=0, warm_start=False)\n",
            "confusion matrix\n",
            "[[ 33   2   5   0   0   0   0]\n",
            " [  0 145   4   1   0   0  14]\n",
            " [  0  11 157   0   0   0  19]\n",
            " [  0   5   2  27   0   0   2]\n",
            " [  0   0   1   0  96   1   1]\n",
            " [  0   0   0   0   1  20   0]\n",
            " [  2   5   6   0   5   0 178]]\n",
            "classification report\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           1       0.94      0.82      0.88        40\n",
            "           2       0.86      0.88      0.87       164\n",
            "           3       0.90      0.84      0.87       187\n",
            "           4       0.96      0.75      0.84        36\n",
            "           5       0.94      0.97      0.96        99\n",
            "           6       0.95      0.95      0.95        21\n",
            "           7       0.83      0.91      0.87       196\n",
            "\n",
            "    accuracy                           0.88       743\n",
            "   macro avg       0.91      0.88      0.89       743\n",
            "weighted avg       0.89      0.88      0.88       743\n",
            "\n",
            "Accuracy : 0.882907\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WdEpTM8yThXy",
        "colab_type": "text"
      },
      "source": [
        "##LDA"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "74LtxjkUTg1w",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "outputId": "53bf09de-2ebc-4b15-f78c-38e83afe76d0"
      },
      "source": [
        "#coding:utf-8\n",
        "import numpy as np\n",
        "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n",
        "import matplotlib.pyplot as plt\n",
        "\n",
        "def lda(data, target, n_dim):\n",
        "\n",
        "    clusters = np.unique(target)\n",
        "\n",
        "    if n_dim > len(clusters)-1:\n",
        "        print(\"K is too much\")\n",
        "        print(\"please input again\")\n",
        "        exit(0)\n",
        "\n",
        "    #within_class scatter matrix\n",
        "    Sw = np.zeros((data.shape[1],data.shape[1]))\n",
        "    for i in clusters:\n",
        "        datai = data[target == i]\n",
        "        datai = datai-datai.mean(0)\n",
        "        Swi = np.mat(datai).T*np.mat(datai)\n",
        "        Sw += Swi\n",
        "\n",
        "    #between_class scatter matrix\n",
        "    SB = np.zeros((data.shape[1],data.shape[1]))\n",
        "    u = data.mean(0)  #所有样本的平均值\n",
        "    for i in clusters:\n",
        "        Ni = data[target == i].shape[0]\n",
        "        ui = data[target == i].mean(0)  #某个类别的平均值\n",
        "        SBi = Ni*np.mat(ui - u).T*np.mat(ui - u)\n",
        "        SB += SBi\n",
        "    S = np.linalg.inv(Sw)*SB\n",
        "    eigVals,eigVects = np.linalg.eig(S)  #求特征值，特征向量\n",
        "    eigValInd = np.argsort(eigVals)\n",
        "    eigValInd = eigValInd[:(-n_dim-1):-1]\n",
        "    w = eigVects[:,eigValInd]\n",
        "    data_ndim = np.dot(data, w)\n",
        "\n",
        "    return data_ndim\n",
        "\n",
        "if __name__ == '__main__':\n",
        "    X=all_data_only\n",
        "    Y=all_data_label\n",
        "    data_1 = lda(X, Y, 5)#自己根据数学原理实现LDA\n",
        "\n",
        "    data_2 = LinearDiscriminantAnalysis(n_components=5).fit_transform(X, Y)#直接调sklearn\n",
        "\n",
        "\n",
        "    plt.figure(figsize=(8,4))\n",
        "    plt.subplot(121)\n",
        "    plt.title(\"my_LDA\")\n",
        "    plt.scatter(data_1[:, 0], data_1[:, 1], c = Y)\n",
        "\n",
        "    plt.subplot(122)\n",
        "    plt.title(\"sklearn_LDA\")\n",
        "    plt.scatter(data_2[:, 0], data_2[:, 1], c = Y)\n",
        "    plt.savefig(\"LDA.png\")\n",
        "    plt.show()"
      ],
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 576x288 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "gmZ5Xg7ZhPjU",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "X_train_LDA,X_test_LDA,y_train_LDA,y_test_LDA=train_test_split(data_2,all_data_label,test_size=0.2,random_state=42)"
      ],
      "execution_count": 42,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EIFs3Na0eqjL",
        "colab_type": "text"
      },
      "source": [
        "##LDA后的随机森林"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "K1-CmJhcem3a",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 587
        },
        "outputId": "3bc2bdb4-9a04-4533-a006-d74a9a216f8a"
      },
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn import metrics\n",
        "\n",
        "rfmodel = RandomForestClassifier()\n",
        "rfmodel.fit(X_train_LDA,y_train_LDA)\n",
        "print('model')\n",
        "print(rfmodel)\n",
        "\n",
        "ypredrf1 = rfmodel.predict(X_test_LDA)\n",
        "print('confusion matrix')\n",
        "print(metrics.confusion_matrix(y_test_LDA, ypredrf1))\n",
        "print('classification report')\n",
        "print(metrics.classification_report(y_test_LDA, ypredrf1))\n",
        "print('Accuracy : %f' % (metrics.accuracy_score(y_test_LDA, ypredrf1)))"
      ],
      "execution_count": 43,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "model\n",
            "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
            "                       criterion='gini', max_depth=None, max_features='auto',\n",
            "                       max_leaf_nodes=None, max_samples=None,\n",
            "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
            "                       min_samples_leaf=1, min_samples_split=2,\n",
            "                       min_weight_fraction_leaf=0.0, n_estimators=100,\n",
            "                       n_jobs=None, oob_score=False, random_state=None,\n",
            "                       verbose=0, warm_start=False)\n",
            "confusion matrix\n",
            "[[ 33   3   4   0   0   0   0]\n",
            " [  0 143   5   0   0   0  16]\n",
            " [  1  12 152   2   0   0  20]\n",
            " [  0   4   6  23   0   0   3]\n",
            " [  0   2   1   0  92   3   1]\n",
            " [  0   0   0   0   5  16   0]\n",
            " [  3   5   4   0   4   0 180]]\n",
            "classification report\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "           1       0.89      0.82      0.86        40\n",
            "           2       0.85      0.87      0.86       164\n",
            "           3       0.88      0.81      0.85       187\n",
            "           4       0.92      0.64      0.75        36\n",
            "           5       0.91      0.93      0.92        99\n",
            "           6       0.84      0.76      0.80        21\n",
            "           7       0.82      0.92      0.87       196\n",
            "\n",
            "    accuracy                           0.86       743\n",
            "   macro avg       0.87      0.82      0.84       743\n",
            "weighted avg       0.86      0.86      0.86       743\n",
            "\n",
            "Accuracy : 0.860027\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "uAZ6o8ZvKO4V",
        "colab_type": "text"
      },
      "source": [
        "##xgboost"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EX-B3FQYKRb3",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 312
        },
        "outputId": "38406482-d30d-4f84-da7e-6adb7e732045"
      },
      "source": [
        "from xgboost import plot_importance\n",
        "from matplotlib import pyplot as plt\n",
        "\n",
        "import xgboost as xgb\n",
        "from numpy import loadtxt\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.metrics import accuracy_score\n",
        "\n",
        "params ={'learning_rate': 0.4,\n",
        "          'max_depth': 20,                # 构建树的深度，越大越容易过拟合\n",
        "          'num_boost_round':2000,\n",
        "          'objective': 'multi:softprob', # 多分类的问题\n",
        "          'random_state': 7,\n",
        "          'silent':0,\n",
        "          'num_class':8,                 # 类别数，与 multisoftmax 并用\n",
        "          'eta':0.8                      #为了防止过拟合，更新过程中用到的收缩步长。eta通过缩减特征 的权重使提升计算过程更加保守。缺省值为0.3，取值范围为：[0,1]\n",
        "        }\n",
        "model = xgb.train(params,xgb.DMatrix(X_train, y_train))\n",
        "y_pred=model.predict(xgb.DMatrix(X_test))\n",
        "\n",
        "model.save_model('testXGboostClass.model')  # 保存训练模型\n",
        "\n",
        "yprob = np.argmax(y_pred, axis=1)  # return the index of the biggest pro\n",
        "\n",
        "predictions = [round(value) for value in yprob]\n",
        "\n",
        "# evaluate predictions\n",
        "accuracy = accuracy_score(y_test, predictions)\n",
        "print(\"Accuracy: %.2f%%\" % (accuracy * 100.0))\n",
        "\n",
        "# 显示重要特征\n",
        "plot_importance(model)\n",
        "plt.show()"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Accuracy: 87.98%\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MCV7donmSmRB",
        "colab_type": "text"
      },
      "source": [
        "##使用smote的xgboost"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iZwebWNzSpKb",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 312
        },
        "outputId": "1f0ade27-fd5c-46b5-f81e-fdf4b10d9e91"
      },
      "source": [
        "from xgboost import plot_importance\n",
        "from matplotlib import pyplot as plt\n",
        "\n",
        "import xgboost as xgb\n",
        "from numpy import loadtxt\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.metrics import accuracy_score\n",
        "\n",
        "params ={'learning_rate': 0.4,\n",
        "          'max_depth': 20,                # 构建树的深度，越大越容易过拟合\n",
        "          'num_boost_round':2000,\n",
        "          'objective': 'multi:softprob', # 多分类的问题\n",
        "          'random_state': 7,\n",
        "          'silent':0,\n",
        "          'num_class':8,                 # 类别数，与 multisoftmax 并用\n",
        "          'eta':0.8                      #为了防止过拟合，更新过程中用到的收缩步长。eta通过缩减特征 的权重使提升计算过程更加保守。缺省值为0.3，取值范围为：[0,1]\n",
        "        }\n",
        "model = xgb.train(params,xgb.DMatrix(X_train_sm, y_train_sm))\n",
        "y_pred=model.predict(xgb.DMatrix(X_test))\n",
        "\n",
        "model.save_model('testXGboostClass.model')  # 保存训练模型\n",
        "\n",
        "yprob = np.argmax(y_pred, axis=1)  # return the index of the biggest pro\n",
        "\n",
        "predictions = [round(value) for value in yprob]\n",
        "\n",
        "# evaluate predictions\n",
        "accuracy = accuracy_score(y_test, predictions)\n",
        "print(\"Accuracy: %.2f%%\" % (accuracy * 100.0))\n",
        "\n",
        "# 显示重要特征\n",
        "plot_importance(model)\n",
        "plt.show()"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Accuracy: 87.43%\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}